#include "CapaciteRaciale.h"

#include <iostream>

using namespace std;

/**
 * Capacité raciale indéfinie (sans non et avec un coût nul), qui sert
 * lors du renvoi par référence, lorsqu'une capacité n'existe pas.
 */
CapaciteRaciale CapaciteRacialeInconnue;

/**
 * Permet d'accéder à CapaciteRacialeInconnue.
 *
 * @return une référence constante sur CapaciteRacialeInconnue.
 */
const CapaciteRaciale& capaciteRacialeInconnue()
{
  return CapaciteRacialeInconnue;
}

/******************************************************************************
 *
 * Définition de la classe CapaciteRaciale
 *
 *****************************************************************************/

/** Constructeur par défaut.
 * Permet de construire une capacité, avec son nom et son prix.
 *
 * @param capa nom de la capacité (par défautl "").
 * @param prix coût de la capacité (par défaut 0).
 */
CapaciteRaciale::CapaciteRaciale( const string& capa, const unsigned& prix )
  : ADDArticleObjet( "CapaciteRaciale", capa, prix )
{}

/** Constructeur de copie.
 * Permet de faire une copie propre d'une autre instance.
 *
 * @param lsCapa capacité à copier.
 */
CapaciteRaciale::CapaciteRaciale( const CapaciteRaciale& lsCapa )
  : ADDArticleObjet( lsCapa )
{}

/**
 * Destructeur, ne fait rien de spécial.
 */
CapaciteRaciale::~CapaciteRaciale()
{}

/**
 * Operateur d'affectation, qui permet de répliquer une instance dans
 * une autre.
 *
 * @param[in] lsCapa instance que l'on veut copier.
 *
 * @return une référence sur l'instance courante.
 */
CapaciteRaciale& CapaciteRaciale::operator=( const CapaciteRaciale& lsCapa )
{
  Nom  = lsCapa.nom();
  Prix = lsCapa.prix();

  return *this;
}

ostream& operator<<( ostream& os, const CapaciteRaciale& lsCapa )
{
  os << lsCapa.nom() << ", coût " << lsCapa.prix();
  return os;
}

FlotMessage& operator<<( FlotMessage& flot, const CapaciteRaciale& lsCapa )
{
  flot << lsCapa.nom() << ", coût " << lsCapa.prix();
  return flot;
}
